home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / parallax / ibm_pc_d.exe / SAMPLES / ROT.P < prev    next >
Text File  |  1992-11-06  |  2KB  |  90 lines

  1. SYSTEM  image_rotation;
  2.  
  3. CONST   m_size = 8;
  4.  
  5. CONFIGURATION  Pic [m_size],[m_size];
  6. CONNECTION     right :  Pic [i, j]  ->  Pic [i, j+1].left;
  7.                left  :  Pic [i, j]  ->  Pic [i, j-1].right;
  8.                up    :  Pic [i, j]  ->  Pic [i+1, j].down;
  9.                down  :  Pic [i, j]  ->  Pic [i-1, j].up;
  10.  
  11. SCALAR  pic_size, size2: INTEGER;
  12.         i,j            : INTEGER;
  13.         picture        : ARRAY [0..m_size-1],[0..m_size-1] OF INTEGER;
  14.  
  15. VECTOR  color, buffer,b2: INTEGER;
  16.         x,y             : INTEGER;
  17.  
  18. BEGIN
  19.   (* init *)
  20.   pic_size := m_size;
  21.   (* create test pattern *)
  22.   FOR i:=0 TO m_size-1 DO
  23.     FOR j:=0 TO m_size-1 DO
  24.       picture[i,j] := 0
  25.     END;
  26.   END;
  27.   FOR i:=0 TO m_size-1 DO 
  28.     picture[i,i] := 1;
  29.   END;
  30.   FOR i:=1 TO 5 DO
  31.     picture[0,i] := 1;
  32.     picture[i,0] := 1;
  33.   END;
  34.  
  35.   (* print original image *)
  36.   WriteLn;
  37.   WriteString(" ORIGINAL IMAGE");
  38.   WriteLn;
  39.   FOR i:=m_size-1 TO 0 BY -1 DO
  40.     FOR j:=0 TO m_size-1 DO
  41.       WriteInt(picture[i,j],2)
  42.     END;
  43.     WriteLn;
  44.   END;
  45.  
  46.   LOAD(color, picture);
  47.  
  48.   WHILE pic_size > 1 DO
  49.     size2 := pic_size DIV 2;
  50.     PARALLEL
  51.       y := DIM1 MOD pic_size;
  52.       x := DIM2 MOD pic_size;
  53.  
  54.       buffer := color;
  55.       IF x < size2 THEN PROPAGATE.up  ^size2 (buffer);
  56.             (* Upper Left Quadrant *)
  57.                         IF y>=size2 THEN b2 := buffer END
  58.                    ELSE PROPAGATE.down^size2 (buffer);
  59.             (* Lower Right Quadrant *)
  60.                         IF y< size2 THEN b2 := buffer END
  61.       END;
  62.  
  63.       buffer := color;
  64.       IF y < size2 THEN PROPAGATE.left ^size2 (buffer);
  65.             (* Lower Left Quadrant *)
  66.                         IF x< size2 THEN b2 := buffer END
  67.                    ELSE PROPAGATE.right^size2 (buffer);
  68.             (* Upper Right Quadrant *)
  69.                         IF x>=size2 THEN b2 := buffer END
  70.       END;
  71.  
  72.       color := b2;  (* copy new value *)
  73.     ENDPARALLEL;
  74.     pic_size := size2;
  75.  
  76.     STORE(color, picture);
  77.     (* print image *)
  78.     WriteLn;
  79.     FOR i:=m_size-1 TO 0 BY -1 DO
  80.       FOR j:=0 TO m_size-1 DO
  81.         WriteInt(picture[i,j],2)
  82.       END;
  83.       WriteLn;
  84.     END
  85.   END; (* while *)
  86.   WriteString(" FINAL IMAGE");
  87.  
  88. END image_rotation.
  89.  
  90.